<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of LoginBO
 *
 * @author thales
 */
class LoginBO {
    
    private $logado;
    private $usuario;
    private $usuarioPerfil;
    
    const GERENTE     = 1;
    const FUNCIONARIO = 2;


    public function __construct(){
        $this->usuario = new UsuarioVO();
        $this->usuarioPerfil = new UsuarioPerfilVO();
    }
    
    /**
     * Método para criptografar uma string.
     * 
     * @param string $senha
     * @return md5 string 
     */
    public static function crip($senha){
        return md5($senha);
    } 
    
    /**
     * Método responsável por efetuar o login do usuário.
     * 
     * @param string $email
     * @param string $senha 
     */
    public function efetuarLogin ( $email, $senha ){

        $this->getUsuario()->setEmail($email);
        $this->getUsuario()->setSenha($this->crip($senha));
        
        $objUsuarioDAO = new UsuarioDAO();
        
        $this->logado = $objUsuarioDAO->validar( $this->getUsuario() );
        
        if ( !$this->logado ){
            throw new UserException('Dados de acesso inválido!');
        }
        
        $this->getUsuario()->setSenha(null);
        $this->getPerfilUsuario();
    }
    
    /**
     * Método para retornar o perfil do usuário logado.
     */
    public function getPerfilUsuario () {
        $this->getUsuarioPerfil()->setUsuarioId($this->getUsuario()->getId());
        
        $objUsuarioPerfilDAO = new UsuarioPerfilDAO();
        
        if($objUsuarioPerfilDAO->pesquisar( $this->getUsuarioPerfil() ) ){
            throw new Exception('Não foi possível pegar o perfil do usuário' . __METHOD__ );
        }
    }
    
    public function validarAutorizacaoUsuario($idAdministrador, $senhaAutorizacao) {
        
        if ( !is_numeric($idAdministrador) && $idAdministrador < 1 ) {
            throw new UserException('Usuário administrador não identificado!');
        }
        
        if ( strlen($senhaAutorizacao) < 3 ) {
            throw new UserException('Digite uma senha válida!');
        }
        
        $this->getUsuario()->setId($idAdministrador);
        $this->getUsuario()->setSenha($this->crip($senhaAutorizacao));
        
        $objUsuarioDAO = new UsuarioDAO();
        if ( !$objUsuarioDAO->validarAutorizacao( $this->getUsuario() ) ){
            throw new UserException('Dados do usuário administrador inválido!');
        }
        
        $this->getPerfilUsuario();
        
        if ( $this->getUsuarioPerfil()->getId() != 1 ) {
            throw new UserException('Você não tem permissão para realizar esta operação!');
        }
        
        return true;
    }


    public function isLogado () {
        return $this->logado;
    }
    
    public function setLogado ($logado) {
        if ( !is_bool($logado) ) {
            throw new Exception('O valor de logado deve ser do tipo boolean!' . __METHOD__ );
        }
        
        $logado = $this->logado;
    }
    
    /**
     * Método para retorna um objeto do tipo FuncionaarioVO.
     * @return UsuarioVO 
     */
    public function getUsuario () {
        return $this->usuario;
    }
    /**
     *
     * @return type 
     */
    public function getUsuarioPerfil () {
        return $this->usuarioPerfil;
    }
}

?>
